﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CapaPresentacion.Commands;
using CapaPresentacion.Vistas;
using Entidades;
using CapaLogica;
using System.Windows.Input;
using System.Windows;
using System.Windows.Data;
using System.Transactions;
using Microsoft.Reporting.WinForms;
using System.Windows.Forms.Integration;

namespace CapaPresentacion.Controles
{
    class ReportePagoCuotasViewModel
    {

        public event ReiniciarCU ReiniciarCU;

        private RelayCommand elegirReporteCommand;
        private RelayCommand reportePagoCuotaMesCommand;
        private RelayCommand buscarAlumnosCommand;
        private RelayCommand reportePagoCuotaAlumnoCommand;

        ReportePagoCuotas view;
        Guid idCicloLectivo;
        Guid idSeleccionado;
        string mes;
        string nombreReporte;
               

        public Guid IdCicloLectivo
        {
            get
            {
                return idCicloLectivo;
            }

            set
            {
                idCicloLectivo = value;

            }
        }

        public Guid IdSeleccionado
        {
            get
            {
                return idSeleccionado;
            }

            set
            {
                idSeleccionado = value;

            }
        }

        public string Mes
        {
            get
            {
                return mes;
            }

            set
            {
                mes = value;

            }
        }

        public string NombreReporte
        {
            get
            {
                return nombreReporte;
            }
            set
            {
                nombreReporte = value;

            }
           
        }

        public List<ViewEntity> ListaCiclos { get; set; }
        public List<ViewEntity> ListaReportes { get; set; }
        public List<ViewEntity> ListaAlumnos { get; set; }
        public List<ViewEntity> ListaMeses { get; set; }

        public ICommand ElegirReporteCommand
        {
            get
            {
                return elegirReporteCommand;
            }
        }

        public ICommand ReportePagoCuotaMesCommand
        {
            get
            {
                return reportePagoCuotaMesCommand;
            }
        }

        public ICommand BuscarAlumnosCommand
        {
            get
            {
                return buscarAlumnosCommand;
            }
        }

        public ICommand ReportePagoCuotaAlumnoCommand
        {
            get
            {
                return reportePagoCuotaAlumnoCommand;
            }
        }

        public ReportePagoCuotasViewModel() { }

        public void Inicializar(ReportePagoCuotas vista)
        {
            this.view = vista;

            ListaCiclos = new CicloLectivoLogica().ObtenerEntidades();

            if (ListaCiclos.Count > 0 && ListaCiclos != null)
            {
                ListaReportes = new List<ViewEntity>();
                ListaReportes.Add(new ViewEntity("Informe de pago de cuotas por mes"));
                ListaReportes.Add(new ViewEntity("Informe de pago de cuotas por alumno"));


                ListaMeses = new List<ViewEntity>();
                ListaMeses.Add(new ViewEntity("Enero"));
                ListaMeses.Add(new ViewEntity("Febrero"));
                ListaMeses.Add(new ViewEntity("Marzo"));
                ListaMeses.Add(new ViewEntity("Abril"));
                ListaMeses.Add(new ViewEntity("Mayo"));
                ListaMeses.Add(new ViewEntity("Junio"));
                ListaMeses.Add(new ViewEntity("Julio"));
                ListaMeses.Add(new ViewEntity("Agosto"));
                ListaMeses.Add(new ViewEntity("Septiembre"));
                ListaMeses.Add(new ViewEntity("Octubre"));
                ListaMeses.Add(new ViewEntity("Noviembre"));
                ListaMeses.Add(new ViewEntity("Diciembre"));


                elegirReporteCommand = new RelayCommand(ElegirReporte);
                reportePagoCuotaMesCommand = new RelayCommand(GenerarReportePagoCuotaMes);
                buscarAlumnosCommand = new RelayCommand(BuscarAlumnos);
                reportePagoCuotaAlumnoCommand = new RelayCommand(GenerarReportePagoCuotaAlumno);

            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado ciclos lectivos");
                nueva.ShowDialog();
                this.ReiniciarCU(CasosDeUso.NuevoCicloLectivo);

            }
           
        }



        private void ElegirReporte(Object parameter)
        {

            if (nombreReporte != null)
            {
                this.view.cmbReportes.IsEnabled = false;
                this.view.btnElegir.IsEnabled = false;

                if (nombreReporte == "Informe de pago de cuotas por mes")
                {

                    this.view.spInformeCuotaMes.Visibility = Visibility.Visible;

                }
                else
                {

                    this.view.spInformeCuotaAlumno.Visibility = Visibility.Visible;
                   
                }

            }
            else
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un tipo de reporte");
                nueva.ShowDialog();

            }



        }


        private void GenerarReportePagoCuotaMes(Object parameter)
        {

            if (ValidacionesReporteCuotaMes())
            {
                CicloLectivo ciclo = new CicloLectivoLogica().ObtenerEntidad(idCicloLectivo);

                List<InformePagoCuotaMes> ListaAlumnosPagoCuota = new PagarCuotaAlumnoLogica().ObtenerAlumnosCuotasPagasYNoPagas(mes, ciclo.FechaDesde.Value.Year);

                if (ListaAlumnosPagoCuota.Count > 0)
                {

                    this.view.rvPagoCuotas.ProcessingMode = ProcessingMode.Local;
                    this.view.rvPagoCuotas.LocalReport.DataSources.Clear();
                    this.view.rvPagoCuotas.LocalReport.DataSources.Add(new ReportDataSource("ConjuntoDatosAlumnosPagoCuota", ListaAlumnosPagoCuota));

                    this.view.rvPagoCuotas.LocalReport.ReportEmbeddedResource = "CapaPresentacion.Controles.ReportePagoCuotaMes.rdlc";
                    this.view.rvPagoCuotas.ShowBackButton = false;
                    this.view.rvPagoCuotas.ShowRefreshButton = false;

                    List<ReportParameter> parameters = new List<ReportParameter>();

                    parameters.Add(new ReportParameter("CicloLectivoParameter", ciclo.NombreCicloLectivo));
                    parameters.Add(new ReportParameter("MesParameter", mes));

                    this.view.rvPagoCuotas.LocalReport.SetParameters(parameters);
                    this.view.rvPagoCuotas.RefreshReport();

                    this.view.spReporte.Visibility = Visibility.Visible;
                }
                else
                {
                     VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un tipo de reporte");
                nueva.ShowDialog();

                }

            }
        }


        private void BuscarAlumnos(Object parameter)
        {

            ListaAlumnos = new AlumnoLogica().ObtenerAlumnosCiclo(idCicloLectivo);

            if (ListaAlumnos.Count > 0)
            {
                this.view.listaDatos.ItemsSource = ListaAlumnos;
                this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                this.view.spAlumnosEncontrados.Visibility = Visibility.Visible;

            }
            else
            {

                this.view.lblNoSelected.Visibility = Visibility.Collapsed;
                this.view.spAlumnosEncontrados.Visibility = Visibility.Collapsed;
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "No se han encontrado alumnos inscriptos al ciclo lectivo seleccionado");
                nueva.ShowDialog();

            }
            
        }




        private void GenerarReportePagoCuotaAlumno(Object parameter)
        {
            if (this.idSeleccionado != Guid.Empty)
            {
                CicloLectivo ciclo = new CicloLectivoLogica().ObtenerEntidad(idCicloLectivo);
                Alumno entidad = new AlumnoLogica().ObtenerEntidad(idSeleccionado);

                List<InformePagoCuotaMes> ListaCuotasPagas = new PagarCuotaAlumnoLogica().ObtenerCuotasPagasYNoPagasPorAlumno(entidad.LegajoAlumno, ciclo);
               
                InformePagoCuotaMes informePagoInscripcion = new InformePagoCuotaMes();                
                informePagoInscripcion.PagoCuota = new PagarInscripcionLogica().ExisteEntidad(entidad.LegajoAlumno, ciclo.IdCicloLectivo);
                InformePagoCuotaMes[] informeInscripcion = new InformePagoCuotaMes[] { informePagoInscripcion };

                this.view.rvPagoCuotas.ProcessingMode = ProcessingMode.Local;

                this.view.rvPagoCuotas.LocalReport.DataSources.Clear();
                this.view.rvPagoCuotas.LocalReport.DataSources.Add(new ReportDataSource("ConjuntoDatosPagoCuotaAlumno", ListaCuotasPagas));
                this.view.rvPagoCuotas.LocalReport.DataSources.Add(new ReportDataSource("ConjuntoDatosPagoInscripcion", informeInscripcion));

                this.view.rvPagoCuotas.LocalReport.ReportEmbeddedResource = "CapaPresentacion.Controles.ReportePagoCuotaAlumno.rdlc";
                this.view.rvPagoCuotas.ShowBackButton = false;
                this.view.rvPagoCuotas.ShowRefreshButton = false;

                List<ReportParameter> parameters = new List<ReportParameter>();

                parameters.Add(new ReportParameter("CicloLectivoParameter", ciclo.NombreCicloLectivo));
                parameters.Add(new ReportParameter("AlumnoParameter", entidad.ApellidoAlumno.Trim() + ", "+ entidad.NombreAlumno.Trim() ));

                this.view.rvPagoCuotas.LocalReport.SetParameters(parameters);
                this.view.rvPagoCuotas.RefreshReport();

                this.view.spReporte.Visibility = Visibility.Visible;
      







            }
            else
            {
                this.view.lblNoSelected.Visibility = Visibility.Visible;
            }







        }


        internal bool ValidacionesReporteCuotaMes()
        {

            if (idCicloLectivo == Guid.Empty || idCicloLectivo == null)
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un ciclo lectivo");
                nueva.ShowDialog();
                return false;
            }
            
            if (String.IsNullOrWhiteSpace(this.mes))
            {
                VentanaAviso nueva = new VentanaAviso(true, "Se ha producido un error", "Debe seleccionar un mes");
                nueva.ShowDialog();
                return false;
            }


            return true;
        }
















    }
}
